package com.ruoyi.ltd_web.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.ltd_web.domain.LtdProductDetailItem;
import com.ruoyi.ltd_web.domain.dto.LtdProductDetailDto;
import com.ruoyi.ltd_web.mapper.LtdProductDetailItemMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.ltd_web.mapper.LtdProductDetailMapper;
import com.ruoyi.ltd_web.domain.LtdProductDetail;
import com.ruoyi.ltd_web.service.ILtdProductDetailService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 产品资料Service业务层处理
 *
 * @author ruoyi
 * @date 2025-03-17
 */
@Service
public class LtdProductDetailServiceImpl implements ILtdProductDetailService
{
    @Autowired
    private LtdProductDetailMapper ltdProductDetailMapper;

    @Autowired
    private LtdProductDetailItemMapper ltdProductDetailItemMapper;

    /**
     * 查询产品资料
     *
     * @param detailId 产品资料主键
     * @return 产品资料
     */
    @Override
    public LtdProductDetail selectLtdProductDetailByDetailId(Long detailId)
    {
        return ltdProductDetailMapper.selectLtdProductDetailByDetailId(detailId);
    }

    /**
     * 查询产品资料列表
     *
     * @param ltdProductDetail 产品资料
     * @return 产品资料
     */
    @Override
    public List<LtdProductDetail> selectLtdProductDetailList(LtdProductDetail ltdProductDetail)
    {
        return ltdProductDetailMapper.selectLtdProductDetailList(ltdProductDetail);
    }

    /**
     * 新增产品资料
     *
     * @param ltdProductDetail 产品资料
     * @return 结果
     */
    @Override
    public int insertLtdProductDetail(LtdProductDetail ltdProductDetail)
    {
        ltdProductDetail.setCreateTime(DateUtils.getNowDate());
        return ltdProductDetailMapper.insertLtdProductDetail(ltdProductDetail);
    }

    /**
     * 修改产品资料
     *
     * @param ltdProductDetail 产品资料
     * @return 结果
     */
    @Override
    public int updateLtdProductDetail(LtdProductDetail ltdProductDetail)
    {
        ltdProductDetail.setUpdateTime(DateUtils.getNowDate());
        return ltdProductDetailMapper.updateLtdProductDetail(ltdProductDetail);
    }

    /**
     * 批量删除产品资料
     *
     * @param detailIds 需要删除的产品资料主键
     * @return 结果
     */
    @Override
    public int deleteLtdProductDetailByDetailIds(Long[] detailIds)
    {
        return ltdProductDetailMapper.deleteLtdProductDetailByDetailIds(detailIds);
    }

    /**
     * 删除产品资料信息
     *
     * @param detailId 产品资料主键
     * @return 结果
     */
    @Override
    public int deleteLtdProductDetailByDetailId(Long detailId)
    {
        return ltdProductDetailMapper.deleteLtdProductDetailByDetailId(detailId);
    }

    @Override
    @Transactional
    public AjaxResult updateLtdProductDetailStatus(Long[] detailIds) {
        for (Long id : detailIds){
            ltdProductDetailMapper.updateLtdProductDetailStatus(id);
        }
        return AjaxResult.success();
    }

    @Override
    public AjaxResult getProductById(Long productId) {
        List<LtdProductDetailDto> details = ltdProductDetailMapper.selectLtdProductDetailByProductId(productId);

        LtdProductDetailItem ltdProductDetailItem = new LtdProductDetailItem();
        ltdProductDetailItem.setProductId(productId);
        ltdProductDetailItem.setStatus(0L);
        List<LtdProductDetailItem> items = ltdProductDetailItemMapper.selectLtdProductDetailItemList(ltdProductDetailItem);
        if(details == null || details.size() < 1){
            return AjaxResult.error("未更新，无数据!");
        }
        if(items == null || items.size() < 1){
            return AjaxResult.success(details);
        }
        for (int i = 0; i < details.size(); i++) {
            List<LtdProductDetailItem> list = new ArrayList<>();
            for (int j = 0; j < items.size(); j++) {
                if(details.get(i).getDetailId().equals(items.get(j).getDetailId())){
                   list.add(items.get(j));
                }
            }
            details.get(i).setItemList(list);
        }
        return AjaxResult.success(details);
    }
}
